home *** CD-ROM | disk | FTP | other *** search
GW-BASIC | 1980-01-01 | 2.8 KB | 145 lines |
- 10 ' ************************************
- 20 ' ** SIMULTANEOUS EQUATIONS **
- 30 ' ************************************
- 40 '
- 50 CLEAR
- 60 SCREEN 0,0,0
- 70 KEY OFF
- 80 CLS
- 90 OPTION BASE 1
- 100 SIZE = 25
- 110 DIM MAT(SIZE,SIZE+1),VAR$(SIZE)
- 120 LOCATE 1,22
- 130 PRINT "* * * Simultaneous Equations * * *"
- 140 LOCATE 4,1
- 150 PRINT "Type in the equations ...
- 160 PRINT
- 170 LINE INPUT A$
- 180 IF A$ = "" THEN 580
- 190 GOSUB 1180
- 200 GOSUB 1290
- 210 EQ = EQ + 1
- 220 FOR I = 1 TO LEN(A$)
- 230 B$ = MID$(A$,I,1)
- 240 C$ = MID$(A$,I+1,1)
- 250 D$ = D$ + B$
- 260 IF B$ >= "A" AND B$ <= "Z" AND (C$ < "A" OR C$ > "Z") THEN GOSUB 300
- 270 NEXT I
- 280 GOSUB 300
- 290 GOTO 170
- 300 NV = VAL(D$)
- 310 IF NV <> VAL(D$+"9") THEN RETURN
- 320 IF LEFT$(D$,1) <> "=" THEN 350
- 330 MAT(EQ,SIZE+1) = VAL(MID$(D$,2))
- 340 GOTO 540
- 350 IF NV THEN 410
- 360 IF INSTR(D$,"0") THEN 410
- 370 IF LEFT$(D$,1) = "-" THEN D$ = "-1"+MID$(D$,2)
- 380 IF LEFT$(D$,1) = "+" THEN D$ = "+1"+MID$(D$,2)
- 390 IF LEFT$(D$,1) <> "-" AND LEFT$(D$,1) <> "+" THEN D$ = "+1"+D$
- 400 GOTO 300
- 410 J = 0
- 420 J = J + 1
- 430 J$ = MID$(D$,J,1)
- 440 IF J$ < "A" OR J$ > "Z" THEN D$ = LEFT$(D$,J-1) + MID$(D$,J+1) : GOTO 410
- 450 IF J < LEN(D$) THEN 420
- 460 PTR = 0
- 470 FOR J = 1 TO SIZE
- 480 IF PTR THEN 510
- 490 IF VAR$(J) = D$ THEN PTR = J
- 500 IF VAR$(J) = "" THEN PTR = J
- 510 NEXT J
- 520 VAR$(PTR) = D$
- 530 MAT(EQ,PTR) = NV
- 540 D$ = ""
- 550 RETURN
- 560 '
- 570 ' output equations
- 580 CLS
- 590 PRINT "Equations entered ..."
- 600 PRINT
- 610 FOR I = 1 TO EQ
- 620 IF I MOD 17 = 0 THEN GOSUB 1370
- 630 FOR J = 1 TO EQ
- 640 P$ = STR$(MAT(I,J))+" "+VAR$(J)
- 650 IF MAT(I,J) >= 0 AND J > 1 THEN MID$(P$,1,1) = "+"
- 660 PRINT " ";P$;
- 670 NEXT J
- 680 PRINT " = ";MAT(I,SIZE+1)
- 690 NEXT I
- 700 GOSUB 1370
- 710 CLS
- 720 LOCATE 5,1
- 730 EQ = 0
- 740 FOR I = 1 TO SIZE
- 750 IF VAR$(I) <> "" THEN EQ = EQ + 1
- 760 NEXT I
- 770 FOR I = 1 TO EQ
- 780 MAT(I,EQ+1) = MAT(I,SIZE+1)
- 790 NEXT I
- 800 FOR A = 1 TO EQ
- 810 PRINT TAB(22) "Working on equation ";A
- 820 PTR = 0
- 830 FOR C = A TO EQ
- 840 IF MAT(C,A) THEN PTR = C
- 850 NEXT C
- 860 IF PTR THEN 910
- 870 PRINT
- 880 PRINT "An infinite number of solutions exist"
- 890 BEEP
- 900 GOTO 1140
- 910 FOR D = 1 TO EQ + 1
- 920 SWAP MAT(PTR,D),MAT(A,D)
- 930 NEXT D
- 940 DENOM = MAT(A,A)
- 950 FOR C = 1 TO EQ + 1
- 960 MAT(A,C) = MAT(A,C)/DENOM
- 970 NEXT C
- 980 FOR C = 1 TO EQ
- 990 IF C = A THEN 1040
- 1000 TEMP = MAT(C,A)
- 1010 FOR D = 1 TO EQ + 1
- 1020 MAT(C,D) = MAT(C,D)-MAT(A,D)*TEMP
- 1030 NEXT D
- 1040 NEXT C,A
- 1050 '
- 1060 ' output results
- 1070 CLS
- 1080 PRINT "Results ..."
- 1090 PRINT
- 1100 FOR I = 1 TO EQ
- 1110 PRINT VAR$(I),MAT(I,EQ+1)
- 1120 IF I MOD 17 = 0 THEN GOSUB 1370
- 1130 NEXT I
- 1140 GOSUB 1370
- 1150 RUN
- 1160 '
- 1170 ' sub to eliminate spaces and asterisks
- 1180 SP = INSTR(A$," ")
- 1190 IF SP = 0 THEN 1220
- 1200 A$ = LEFT$(A$,SP-1) + MID$(A$,SP+1)
- 1210 GOTO 1180
- 1220 SP = INSTR(A$,"*")
- 1230 IF SP = 0 THEN 1260
- 1240 A$ = LEFT$(A$,SP-1) + MID$(A$,SP+1)
- 1250 GOTO 1220
- 1260 RETURN
- 1270 '
- 1280 ' sub to capitalize A$
- 1290 FOR CHAR = 1 TO LEN(A$)
- 1300 IF MID$(A$,CHAR,1) < "a" THEN 1330
- 1310 IF MID$(A$,CHAR,1) > "z" THEN 1330
- 1320 MID$(A$,CHAR,1) = CHR$(ASC(MID$(A$,CHAR,1))-32)
- 1330 NEXT CHAR
- 1340 RETURN
- 1350 '
- 1360 ' sub to wait before continuing
- 1370 LOCATE 25,30
- 1380 POKE 106,0
- 1390 PRINT "Press any key to continue";
- 1400 K$ = INKEY$
- 1410 IF K$ = "" THEN 1400
- 1420 CLS
- 1430 LOCATE 3,1
- 1440 RETURN
-